/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilitarios;

/**
 *
 * @author Mateus
 */
public class Filtros {
  public  int [][] retornoBaixa;
   public int [][] retornoAlta;
  
    public void passaBaixa(int Original[][], int altura, int largura){
        //int M[][] = new int[3][3];
        int i, j, l = 0, k = 0;
        int soma = 0;
        int Aux[][] = new int [altura+2][(largura+2)*3];    //Matriz auxiliar que contém 1 linha e coluna a mais
        //Copiando valores da matriz original para matriz auxiliar, onde linha e coluna incrementadas são uma cópia de seus vizinhos
        Aux[0][0] = Original[0][0];
        Aux[altura+1][0] = Original[altura-1][0];
        Aux[0][largura+1] = Original[0][largura-1];
        Aux[altura+1][largura+1] = Original[altura-1][largura-1];
        
        for(i = 1; i <= altura; i++){   //preenche os elementos das bordas das laterais
            Aux[i][0] = Original[i-1][0];
            Aux[i][largura+1] = Original[i-1][largura-1];
        }
        
        for(i = 1; i <= largura*3; i++){  //preenche os elementos das bordas superior e inferior
            Aux[0][i] = Original[0][i-1];
            Aux[altura+1][i] = Original[altura-1][i-1];
        }
        
        for(i = 1; i <= altura; i++){
            for(j = 1; j <= largura*3; j++){
                    Aux[i][j] = Original[i-1][j-1];
            }
        }
        
        /*for(i = 1; i <= altura; i++){
            for(j = 1; j <= largura; j++){
                System.out.println(Aux[i][j]+" ");
            }
            System.out.println("\n");
        }*/
        
        for(i = 0; i < altura; i++){
            for(j = 0; j < largura*3; j++){
                for(k = i; k < i+3; k++){
                    for(l = j; l < (j+3); l++){
                        soma += Aux[k][l];
                    }
                }
                soma=soma / 9;    //calculo da média
                Original[i][j] = soma;
                soma = 0;
            }
            //if ((k+3 == altura) && (l+3 == largura))
            //    break;
        }
        
        //Retorna o resultado a Matriz Original
        /*for(i = 1; i <= altura; i++){
            for(j = 1; j <= largura; j++){
                Original[i-1][j-1] = Aux[i][j];
            }
        }*/
        retornoBaixa = Original;
    }
    
    public void passaAlta(int Original[][], int altura, int largura){
        
        int i, j;
        int Aux[][] = new int [altura+1][(largura+1)*3];    //Matriz auxiliar que contém 1 linha e coluna a mais
        //Copiando valores da matriz original para matriz auxiliar, onde linha e coluna incrementadas são uma cópia de seus vizinhos
        
        Aux[altura][largura] = Original[altura-1][largura-1];
        
        for(i = 0; i < altura; i++)   //preenche os elementos da borda LATERAL à Direita
            Aux[i][largura] = Original[i][largura-1];
        
        for(i = 0; i < largura*3; i++)  //preenche os elementos da BORDA INFERIOR
            Aux[altura][i] = Original[altura-1][i];
        
        for(i = 0; i < altura; i++){
            for(j = 0; j < largura*3; j++){
                    Aux[i][j] = Original[i][j];
            }
        }
        
        for(i = 0; i < altura; i++){
            for(j = 0; j < largura*3; j++){
                double x1 = Aux[i][j] - Aux[i+1][j+1];
                double x2 = Aux[i+1][j] - Aux[i][j+1];
                Original[i][j] = (int) Math.sqrt(Math.pow(x1, 2) + Math.pow(x2, 2));
            }
        }
        retornoAlta = Original;
        /*for(i = 0; i <= altura; i++){
            for(j = 0; j <= largura; j++){
                System.out.println(Aux[i][j]+" ");
            }
            System.out.println("\n");
        }
        System.out.println("Agora a Certa");
        
        for(i = 0; i < altura; i++){
            for(j = 0; j < largura; j++){
                System.out.println(Original[i][j]+" ");
            }
            System.out.println("\n");
        }*/
        
    }
    
}
